class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) 
    {
        if(nums.empty())
        {
            return {-1,-1};
        }
        //使用两个特殊的二分模板寻找左端点和右端点
        int left = 0;
        int right = nums.size()-1;
        vector<int> ret;
        while(left<right)
        {
            int mid = (left+right)/2;
            if(nums[mid]<target)
            {
                left= mid+1;
            }
            else
            {
                right = mid;
            }
        }
        if(nums[left]!=target)
        {
            return {-1,-1};
        }//不存在这个元素
        ret.push_back(left);
        left = 0;
        right = nums.size()-1;
        while(left<right)
        {
            
            int mid = (left+right+1)/2;
            if(nums[mid]>target)
            {
                right= mid-1;
            }
            else
            {
                left = mid;
            }
        }
        ret.push_back(left);
        return ret;
    }
};